﻿Public Class FrmCapNhatPhieuXuatKho
    Private flag As Boolean

    Private Sub FrmCapNhatPhieuXuatKho_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        loadDSSP()
        loadDSPXK()
        LockButton(True)
        LockTextbox(False)
        GhiPX()
        Load_cboSP()
    End Sub

    'load all data trong bảng chi tiết phiếu xuất
    Sub loadDSSP()
        Dim ds As DataTable
        ds = CapNhatPhieuXuatKho_DAO.SelectAll()
        dgvChiTietPXH.DataSource = ds
    End Sub

    'load all data trong bảng phiếu xuất
    Sub loadDSPXK()
        Dim ds As DataTable
        ds = CapNhatPhieuXuatKho_DAO.SelectAllPXK()
        dgvDSPXK.DataSource = ds
    End Sub

    'load danh sách tên kho, tên khách hàng, tên sản phầm
    Sub Load_cboSP()

        'load cbo tên sản phẩm
        cboTenSPXK.DataSource = CapNhatThongTinSP_DAO.SelectAll()
        cboTenSPXK.DisplayMember = "TenSanPham"
        cboTenSPXK.ValueMember = "MaSanPham"

        'load cbo tên khách hàng
        cboCongTy.DataSource = CapNhatThongTinKH_DAO.SelectAll()
        cboCongTy.DisplayMember = "TenCTY"
        cboCongTy.ValueMember = "MaCTY"

        'load tên kho
        cboTenKhoXK.DataSource = DanhSachKhoHang_DAO.SelectAll()
        cboTenKhoXK.DisplayMember = "TenKho"
        cboTenKhoXK.ValueMember = "MaKho"
    End Sub

    'xóa trắng các textbox
    Sub ClearTextbox()
        txtSoPhieuXK.Text = ""
        txtSoLuong.Text = ""
        txtDonGia.Text = ""
    End Sub

    'đồng bộ các nút chức năng giống nhau
    Sub LockButton(ByVal bt As Boolean)
        btnThemXK.Enabled = bt
        btnSuaXK.Enabled = bt
        btnXoaXK.Enabled = bt
        btnLuuXK.Enabled = Not bt
        btnKhongLuuXK.Enabled = Not bt
        btnThoat.Enabled = bt
        btnGhi.Enabled = Not bt
        btnXoa.Enabled = Not bt
        btnLuuPhieuSua.Enabled = Not bt
    End Sub

    'lock các textbox 
    Sub LockTextbox(ByVal tb As Boolean)
        txtSoPhieuXK.Enabled = tb
        txtSoLuong.Enabled = tb
        txtDonGia.Enabled = tb

        If tb = False Then
            txtSoPhieuXK.BackColor = Color.GreenYellow
            txtSoLuong.BackColor = Color.GreenYellow
            txtDonGia.BackColor = Color.GreenYellow
        Else
            txtSoPhieuXK.BackColor = Color.White
            txtSoLuong.BackColor = Color.White
            txtDonGia.BackColor = Color.White
        End If
    End Sub

    Private Function TestData() As Boolean
        TestData = True
        If Trim(txtSoPhieuXK.Text) = "" Then
            TestData = False
            MsgBox("Nhập tên số phiếu", MsgBoxStyle.Exclamation, "Thông Báo Lỗi")
            txtSoPhieuXK.Focus()
            Exit Function
        ElseIf Trim(txtSoLuong.Text) = "" Then
            TestData = False
            MsgBox("Nhập số lượng", MsgBoxStyle.Exclamation, "Thông Báo Lỗi")
            txtSoLuong.Focus()
            Exit Function
        ElseIf Trim(txtDonGia.Text) = "" Then
            TestData = False
            MsgBox("Nhập đơn giá", MsgBoxStyle.Exclamation, "Thông Báo Lỗi")
            txtDonGia.Focus()
            Exit Function
        End If
    End Function

    'hàm thêm phiếu xuất
    Sub Them()
        Dim pxk As CapNhatPhieuXuatKho_DTO = New CapNhatPhieuXuatKho_DTO()
        pxk.SoPhieu = txtSoPhieuXK.Text
        pxk.MaCongTy = cboCongTy.SelectedValue
        pxk.NgayXuat = dtNgayXuat.Value

        CapNhatPhieuXuatKho_DAO.InsertPX(pxk)
        loadDSPXK()
    End Sub

    'hàm xóa phiếu xuất
    Sub Xoa()
        Dim pxk As CapNhatPhieuXuatKho_DTO = New CapNhatPhieuXuatKho_DTO()
        pxk.SoPhieu = txtSoPhieuXK.Text

        Dim q = MsgBox("Bạn có chắc muốn xóa số phiếu này", vbInformation + vbYesNo, "Thông Báo!")
        If q = vbYes Then
            CapNhatPhieuXuatKho_DAO.Delete(pxk)
            CapNhatPhieuXuatKho_DAO.DeletePX(pxk)

            loadDSPXK()
            MsgBox("Số phiếu đã được xóa", vbInformation, "Thông Báo!")
        Else
            MsgBox("Đã hủy lệnh xóa !", vbExclamation, "Thông Báo!")
        End If
    End Sub

    'hàm sửa phiếu xuất
    Sub Sua()
        Dim pxk As CapNhatPhieuXuatKho_DTO = New CapNhatPhieuXuatKho_DTO()
        pxk.id = txtid.Text
        pxk.SoPhieu = txtSoPhieuXK.Text
        pxk.MaSanPham = cboTenSPXK.SelectedValue
        pxk.SoLuong = txtSoLuong.Text
        pxk.DonGia = _txtDonGia.Text
        pxk.MaKho = cboTenKhoXK.SelectedValue

        CapNhatPhieuXuatKho_DAO.Update(pxk)
        loadDSPXK()
    End Sub

    'hàm ghi sp vào phiếu xuất tạm thời
    Sub GhiPX()
        dgvDSSPXuatKho.Columns.Add("1", "Ten San Pham")
        dgvDSSPXuatKho.Columns.Add("2", "So Luong")
        dgvDSSPXuatKho.Columns.Add("3", "Don Gia")
        dgvDSSPXuatKho.Columns.Add("4", "Ma Kho")
    End Sub

    ''hàm xóa phiếu xuất tạm thời
    Sub XoaPX()
        dgvDSSPXuatKho.Rows.Remove(dgvDSSPXuatKho.Rows(dgvDSSPXuatKho.SelectedCells.Item(0).RowIndex))
    End Sub

    'xử lý sự kiện nút thêm
    Private Sub btnThemXK_Click(sender As Object, e As EventArgs) Handles btnThemXK.Click
        flag = True
        LockTextbox(True)
        LockButton(False)
        ClearTextbox()
        txtSoPhieuXK.Focus()
    End Sub

    'xử lý sự kiện nút sửa
    Private Sub btnSuaXK_Click(sender As Object, e As EventArgs) Handles btnSuaXK.Click
        flag = False
        LockTextbox(True)
        LockButton(False)
        dgvChiTietPXH.Enabled = False
        txtSoPhieuXK.Focus()
    End Sub

    'xử lý sự kiện nút xóa
    Private Sub btnXoaXK_Click(sender As Object, e As EventArgs) Handles btnXoaXK.Click
        Xoa()
    End Sub

    'xử lý sự kiện nút ghi tạm thời
    Private Sub btnGhi_Click(sender As Object, e As EventArgs) Handles btnGhi.Click
        dgvDSSPXuatKho.Rows.Add(cboTenSPXK.SelectedValue, txtSoLuong.Text, txtDonGia.Text, cboTenKhoXK.SelectedValue)
    End Sub

    Private Sub btnXoa_Click(sender As Object, e As EventArgs) Handles btnXoa.Click
        XoaPX()
    End Sub

    Private Sub btnLuuXK_Click(sender As Object, e As EventArgs) Handles btnLuuXK.Click
        If TestData() Then
            If flag = True Then
                Them()
                For Each ds As DataGridViewRow In dgvDSSPXuatKho.Rows
                    Dim r = ds.Cells(0)
                    Dim pxk As CapNhatPhieuXuatKho_DTO = New CapNhatPhieuXuatKho_DTO()
                    pxk.SoPhieu = txtSoPhieuXK.Text
                    pxk.MaSanPham = ds.Cells(0).Value
                    pxk.SoLuong = ds.Cells(1).Value
                    pxk.DonGia = ds.Cells(2).Value
                    pxk.MaKho = ds.Cells(3).Value

                    If Not String.IsNullOrEmpty(r.Value) Then
                        CapNhatPhieuXuatKho_DAO.Insert(pxk)
                    End If
                Next
            Else
                Sua()
            End If

            LockTextbox(False)
            LockButton(True)
            dgvChiTietPXH.Enabled = True
            MsgBox("Cập nhật dữ liệu thành công", MsgBoxStyle.Information, "Thông Báo")
        End If
    End Sub

    'sự kiện nút hủy
    Private Sub btnKhongLuuXK_Click(sender As Object, e As EventArgs) Handles btnKhongLuuXK.Click
        loadDSPXK()
        Load_cboSP()
        LockTextbox(False)
        LockButton(True)
        dgvChiTietPXH.Enabled = True
        For Each ds As DataGridViewRow In dgvDSSPXuatKho.Rows
            If (dgvDSSPXuatKho.SelectedRows.Count > 0) Then
                dgvDSSPXuatKho.Rows.Remove(dgvDSSPXuatKho.Rows(dgvDSSPXuatKho.SelectedCells.Item(0).RowIndex))
            End If
        Next
    End Sub

    Sub ShowChiTietPX()
        If (dgvChiTietPXH.SelectedRows.Count > 0) Then
            txtid.Text = dgvChiTietPXH.SelectedRows(0).Cells(0).Value.ToString()
            cboTenSPXK.SelectedValue = dgvChiTietPXH.SelectedRows(0).Cells(2).Value.ToString()
            txtSoLuong.Text = dgvChiTietPXH.SelectedRows(0).Cells(4).Value.ToString()
            txtDonGia.Text = dgvChiTietPXH.SelectedRows(0).Cells(3).Value.ToString()
            cboTenKhoXK.SelectedValue = dgvChiTietPXH.SelectedRows(0).Cells(5).Value.ToString()
        End If
    End Sub

    Private Sub dgvChiTietPXH_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvChiTietPXH.CellContentClick
        ShowChiTietPX()
    End Sub

    Private Sub dgvChiTietPXH_SelectionChanged(sender As Object, e As EventArgs) Handles dgvChiTietPXH.SelectionChanged
        ShowChiTietPX()
    End Sub

    Private Sub btnThoat_Click(sender As Object, e As EventArgs) Handles btnThoat.Click
        Me.Close()
    End Sub

    Private Sub dgvDSPXK_SelectionChanged(sender As Object, e As EventArgs) Handles dgvDSPXK.SelectionChanged
        If (dgvDSPXK.SelectedRows.Count > 0) Then
            Dim sp As String = dgvDSPXK.SelectedRows(0).Cells(0).Value.ToString()

            dgvChiTietPXH.DataSource = CapNhatPhieuXuatKho_DAO.SelectBySP(sp)
            dgvDSSPXuatKho.DataSource = CapNhatPhieuXuatKho_DAO.SelectBySP1(sp)

            txtSoPhieuXK.Text = sp
        End If
    End Sub

    Private Sub cboCongTy_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCongTy.SelectedIndexChanged
        txtDiaChi.Text = cboCongTy.Text
        txtSDT.Text = cboCongTy.Text
        txtSFax.Text = cboCongTy.Text
    End Sub
End Class
 